home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / oop55.zip / DOSSTM.ASM < prev    next >
Assembly Source File  |  1989-05-02  |  5KB  |  221 lines

  1. ; Turbo Pascal 5.5 object-oriented example
  2. ; Assembler code for OBJECTS.PAS unit
  3. ; Copyright (c) 1989 by Borland International, Inc.
  4.  
  5.         TITLE   DOSSTM
  6.  
  7.         INCLUDE OBJECTS.INC
  8.  
  9. CODE    SEGMENT BYTE PUBLIC
  10.  
  11.         EXTRN   StreamError:NEAR
  12.  
  13.         ASSUME  CS:CODE
  14.  
  15.         PUBLIC  DosStream@GetPos
  16.  
  17. DosStream@GetPos  PROC  FAR
  18.  
  19. @Self           EQU     (DWORD PTR [BP+6])
  20.  
  21.         PUSH    BP
  22.         MOV     BP,SP
  23.         LES     DI,@Self
  24.         CMP     ES:[DI].Stream@Status,0
  25.         JNE     @@1
  26.         XOR     CX,CX
  27.         MOV     DX,CX
  28.         MOV     BX,ES:[DI].DosStream@Handle
  29.         MOV     AX,4201H
  30.         INT     21H
  31.         JNC     @@2
  32.         CALL    StreamError
  33. @@1:    MOV     AX,-1
  34.         MOV     DX,AX
  35. @@2:    POP     BP
  36.         RET     4
  37.  
  38. DosStream@GetPos  ENDP
  39.  
  40.         PUBLIC  DosStream@Read
  41.  
  42. DosStream@Read  PROC    FAR
  43.  
  44. @Buf            EQU     (DWORD PTR [BP+12])
  45. @Count          EQU     (WORD PTR [BP+10])
  46. @Self           EQU     (DWORD PTR [BP+6])
  47.  
  48.         PUSH    BP
  49.         MOV     BP,SP
  50.         LES     DI,@Self
  51.         CMP     ES:[DI].Stream@Status,0
  52.         JNE     @@2
  53.         PUSH    DS
  54.         LDS     DX,@Buf
  55.         MOV     CX,@Count
  56.         MOV     BX,ES:[DI].DosStream@Handle
  57.         MOV     AH,3FH
  58.         INT     21H
  59.         POP     DS
  60.         JC      @@1
  61.         CMP     AX,CX
  62.         JE      @@3
  63.         MOV     AX,100
  64. @@1:    CALL    StreamError
  65. @@2:    LES     DI,@Buf
  66.         MOV     CX,@Count
  67.         XOR     AL,AL
  68.         CLD
  69.         REP     STOSB
  70. @@3:    POP     BP
  71.         RET     10
  72.  
  73. DosStream@Read  ENDP
  74.  
  75.         PUBLIC  DosStream@SetPos
  76.  
  77. DosStream@SetPos  PROC  FAR
  78.  
  79. @Pos            EQU     (DWORD PTR [BP+12])
  80. @Mode           EQU     (BYTE PTR [BP+10])
  81. @Self           EQU     (DWORD PTR [BP+6])
  82.  
  83.         PUSH    BP
  84.         MOV     BP,SP
  85.         LES     DI,@Self
  86.         CALL    StreamFlush
  87.         JNE     @@1
  88.         MOV     DX,@Pos.w0
  89.         MOV     CX,@Pos.w2
  90.         MOV     BX,ES:[DI].DosStream@Handle
  91.         MOV     AL,@Mode
  92.         MOV     AH,42H
  93.         INT     21H
  94.         JNC     @@1
  95.         CALL    StreamError
  96. @@1:    POP     BP
  97.         RET     10
  98.  
  99. DosStream@SetPos  ENDP
  100.  
  101.         PUBLIC  DosStream@Truncate
  102.  
  103. DosStream@Truncate  PROC  FAR
  104.  
  105. @Self           EQU     (DWORD PTR [BP+6])
  106.  
  107.         PUSH    BP
  108.         MOV     BP,SP
  109.         LES     DI,@Self
  110.         CALL    StreamFlush
  111.         JNE     @@1
  112.         XOR     CX,CX
  113.         MOV     BX,ES:[DI].DosStream@Handle
  114.         MOV     AH,40H
  115.         INT     21H
  116.         JNC     @@1
  117.         CALL    StreamError
  118. @@1:    POP     BP
  119.         RET     4
  120.  
  121. DosStream@Truncate  ENDP
  122.  
  123.         PUBLIC  DosStream@Write
  124.  
  125. DosStream@Write  PROC   FAR
  126.  
  127. @Buf            EQU     (DWORD PTR [BP+12])
  128. @Count          EQU     (WORD PTR [BP+10])
  129. @Self           EQU     (DWORD PTR [BP+6])
  130.  
  131.         PUSH    BP
  132.         MOV     BP,SP
  133.         LES     DI,@Self
  134.         CMP     ES:[DI].Stream@Status,0
  135.         JNE     @@2
  136.         PUSH    DS
  137.         LDS     DX,@Buf
  138.         MOV     CX,@Count
  139.         MOV     BX,ES:[DI].DosStream@Handle
  140.         MOV     AH,40H
  141.         INT     21H
  142.         POP     DS
  143.         JC      @@1
  144.         CMP     AX,CX
  145.         JE      @@2
  146.         MOV     AX,101
  147. @@1:    CALL    StreamError
  148. @@2:    POP     BP
  149.         RET     10
  150.  
  151. DosStream@Write  ENDP
  152.  
  153.         PUBLIC  DosStream@Close
  154.  
  155. DosStream@Close  PROC   FAR
  156.  
  157. @Self           EQU     (DWORD PTR [BP+6])
  158.  
  159.         PUSH    BP
  160.         MOV     BP,SP
  161.         LES     DI,@Self
  162.         CALL    StreamFlush
  163.         JNE     @@1
  164.         MOV     BX,ES:[DI].DosStream@Handle
  165.         MOV     AH,3EH
  166.         INT     21H
  167. @@1:    POP     BP
  168.         RET     4
  169.  
  170. DosStream@Close  ENDP
  171.  
  172.         PUBLIC  DosStream@Open
  173.  
  174. DosStream@Open  PROC    FAR
  175.  
  176. @Name           EQU     (DWORD PTR [BP+12])
  177. @Mode           EQU     (WORD PTR [BP+10])
  178. @Self           EQU     (DWORD PTR [BP+6])
  179.  
  180.         PUSH    BP
  181.         MOV     BP,SP
  182.         LES     DI,@Self
  183.         PUSH    DS
  184.         LDS     DX,@Name
  185.         XOR     CX,CX
  186.         MOV     AX,@Mode
  187.         INT     21H
  188.         POP     DS
  189.         JNC     @@1
  190.         CALL    StreamError
  191.         MOV     AX,0FFFFH
  192. @@1:    MOV     ES:[DI].DosStream@Handle,AX
  193.         POP     BP
  194.         RET     10
  195.  
  196. DosStream@Open  ENDP
  197.  
  198. ; Call stream flush procedure
  199. ; In    ES:DI = Stream object pointer
  200. ; Out   ZF    = Status test
  201. ; Uses  AX,BX,CX,DX,SI
  202.  
  203. StreamFlush     PROC    NEAR
  204.  
  205.         PUSH    ES
  206.         PUSH    DI
  207.         PUSH    ES
  208.         PUSH    DI
  209.         MOV     DI,ES:[DI]
  210.         CALL    [DI].Stream$Flush
  211.         POP     DI
  212.         POP     ES
  213.         CMP     ES:[DI].Stream@Status,0
  214.         RET
  215.  
  216. StreamFlush     ENDP
  217.  
  218. CODE    ENDS
  219.  
  220.         END
  221.